package api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import lombok.SneakyThrows;
import model.Article;
import util.AppVar;
import util.DBUtils;
import util.ResultUtils;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

/**
 * 获取我的文章详情
 */
@WebServlet("/myartlist")
public class MyArticleListServlet extends HttpServlet {
    @SneakyThrows
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // todo:判断登录状态，uid 从 session 中获取（不能从前端传递）
        List<Article> list = new ArrayList<>();
        String msg = "未知错误";
        String uidStr = req.getParameter("uid");
        if (!StrUtil.isBlank(uidStr)) {
            int uid = Integer.valueOf(uidStr);
            // 查询数据库得到文章列表
            // 1.得到 Connection
            Connection connection = DBUtils.getConnection();
            // 2.拼接 sql，得到执行器
            String sql = "select * from article where uid=?";
            PreparedStatement statement = connection.prepareStatement(sql);
            // 3.设置占位符，并执行 sql
            statement.setInt(1, uid);
            ResultSet resultSet = statement.executeQuery();
            // 4.将查询的结果添加到容器汇总
            while (resultSet.next()) {
                String context = resultSet.getString("context"); // 文章正文
                Article article = new Article();
                article.setAid(resultSet.getInt("aid"));
                article.setTitle(resultSet.getString("title"));
                article.setContext(context);
                // 简介
                int subLength = Integer.min(20, context.length());
                article.setDesc(context.substring(0, subLength).
                        replace("#", ""));
                String createtime = resultSet.getString("createtime");
                article.setCreatetime(createtime.substring(0, createtime.lastIndexOf(".")));
                article.setReadcount(resultSet.getInt("readcount"));
                article.setUid(resultSet.getInt("uid"));
                article.setState(resultSet.getInt("state"));
                list.add(article);
            }
            //  关闭资源
            DBUtils.close(resultSet, statement, connection);
        } else {
            msg = "非法参数！";
        }
        resp.setContentType(AppVar.RESPONSE_CONTENTTYPE_JSON);
        resp.getWriter().println(JSONUtil.toJsonStr(ResultUtils.toResult(
                200, list, msg)));
    }
}
